package util;

import java.util.*;

/**
 * @author Administrator
 */
public class UtilMapAndList {
    public static void main(String[] args) {

        System.out.println("###########################################################################");
        // 一对多和多对一的概念(list中有map)
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> map = new HashMap<>(16);
        map.put("1", 1);
        map.put("2", 2);
        map.put("3", 3);
        map.put("4", 4);
        map.put("5", 5);
        list.add(map);

        // 再次遍历输出list中的map元素
        for (Map<String, Object> stringObjectMap : list) {
            Set<Map.Entry<String, Object>> entries = stringObjectMap.entrySet();
            for (Map.Entry<String, Object> entry : entries) {
                System.out.println("key值 = " + entry.getKey() + "\n" + "values值 = " + entry.getValue());
            }
        }

        // 一对多和多对一的概念(map中的list)
        System.out.println("###########################################################################");
        Map<List<String>, Object> objectObjectHashMap = new HashMap<>(16);
        ArrayList<String> objects = new ArrayList<>();
        objects.add("1");
        objects.add("2");
        objects.add("3");
        objects.add("4");
        objectObjectHashMap.put(objects, 2);
        Set<Map.Entry<List<String>, Object>> entries = objectObjectHashMap.entrySet();
        for (Map.Entry<List<String>, Object> entry : entries) {
            System.out.println("entry.getKey() = " + entry.getKey());
            System.out.println("entry.getValue() = " + entry.getValue());
        }
        System.out.println("###########################################################################");


        /* String[] arrayList = {"1", "2", "3"};
        List<String> strings = Arrays.asList(arrayList);
        strings.set(0, "modify_1");
        arrayList[1] = "modify_2";
        List<String> list2 = new ArrayList<>(strings);
        list2.add("add element");
        System.out.println("arrayList = " + list2);
        System.out.println("strings = " + strings);*/

        // java.util.ConcurrentModificationException
        /*String[] arrays = {"1", "2", "3"};
        List<String> list2 = new ArrayList<>(Arrays.asList(arrays));
        for (String str : list2) {
            if ("1".equals(str)) {
                list2.remove(str);
            }
        }
        System.out.println("list2 = " + list2);*/

        // JDK1.8推荐使用移除元素方式
        String[] arrays = {"1", "2", "3"};
        List<String> list2 = new ArrayList<>(Arrays.asList(arrays));
        list2.removeIf("1"::equals);
        System.out.println("list2 = " + list2);

        /*
        第一、我们不要先入为主，想当然就认为 Arrays.asList 和 List.subList 就是一个普通，独立的 ArrayList。
        如果没办法，使用了 Arrays.asList 和 List.subList ，返回给其他方法的时候，一定要记得再套娃一层真正的 java.util.ArrayList。
        第二、JDK 的提供的不可变集合实际非常笨重，并且低效，还不安全，所以推荐使用 Guava 不可变集合代替。
        第三、不要随便在 foreach增加/删除元素。
        */


    }
}
